
#pragma once

#include "config.h"

#include <tgbot/tgbot.h>

using namespace TgBot;


class CCB {
public:
    CCB(const CCB &)            = delete;
    CCB(CCB &&)                 = delete;
    CCB &operator=(const CCB &) = delete;
    CCB &operator=(CCB &&)      = delete;
    ~CCB();

    static CCB *getCCB(const_ch* token);
    void run();

private:
    static CCB* s_instance;

    CCB(const_ch* token);

    Bot* bot;
    int chatId;

    void sendMessagePrintWorkCode(const_pair_str textTrue, const_pair_str textFalse);
    const InlineKeyboardButton::Ptr createInlineKeyboardButton(const_str textName, const_str textData);

    void compilerFile(const_str command, function<void()> function);
    const_str searchText(size_t_c startNumber, size_t_c endNumber, const_str text);
    void sendDocument(const_ch* text);
    const_str ifUserNotCompiler(const_str compilerText, size_t_c compilerIndex, const_str nameFile=standartPath);
    const_bool checkFlagMatchesSetFlags(const_str textFlags, string& compilerText, int& compilerIndex);
    
    void submit(CallbackQuery::Ptr callbackQuery, const_ch* CheackTextOnButton, 
        function<void(const_int)> functionTrue, function<void(const_int)> functionFalse);
    void printWorkProgram(const_int chatId); 
    void createAndCompilerFileCompiler(Message::Ptr message, const_str compiler, const_str filePath);

    void TextCompiler(Message::Ptr message);
    void FileCompiler(Message::Ptr message);
    void commmand();

};
